package com.pet.common.domain;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;

@Data
public class PageQuery {
    // 设置默认值, 避免空指针异常
    private Integer pageNo = 1;
    private Integer pageSize = 5;
    private String sortBy;
    private Boolean isAsc = true;

    // 提供零或多个OrderItem对象构建Page
    public <T> Page<T> toMpPage(OrderItem ... items) {
        // 1. 分页条件
        Page<T> page = Page.of(pageNo, pageSize);
        // 2. 排序条件
        if (StrUtil.isNotBlank(sortBy)) {
            // 2.1. 不为空
            page.addOrder(new OrderItem(sortBy, isAsc));
            return page;
        }
        if (items != null) {
            // 2.2. 为空, 默认排序
            page.addOrder(items);
        }
        return page;
    }

    // 提供单个排序字段和是否升序字段构建Page
    public <T> Page<T> toMpPage(String defaultSortBy, Boolean defaultAsc){
        return toMpPage(new OrderItem(defaultSortBy, defaultAsc));
    }

    // 默认按照创建时间降序排序, 字段名根据数据库自行修改
    public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc() {
        return toMpPage("create_time", false);
    }

    // 默认按照更新时间降序排序, 字段名根据数据库自行修改
    public <T> Page<T> toMpPageDefaultSortByUpdateTimeDesc() {
        return toMpPage("update_time", false);
    }
}